# 第21节 python 3 推导式
# https://www.runoob.com/python3/python-comprehensions.html
# Python 推导式是一种独特的数据处理方式，可以从一个数据序列构建另一个新的数据序列的结构体。

# 列表推导式
# [表达式 for 变量 in 列表 if 条件]
# [out_exp_res for out_exp in input_list if condition]
# 过滤掉长度小于或等于3的字符串列表，并将剩下的转换成大写字母
name=['Bob','Tom','alice','Jerry','Wendy','Smith']
name_filter=[i.upper()for i in name  if len(i)>3]
print(name,name_filter,sep='\n')
# 计算30以内可以被3整除的整数：
a=[i for i in range(30) if i%3==0]
print(a)

# 字典推导式
# { key_expr: value_expr for value in collection if condition }
# key_expr:键，value_expr:值
# 将列表中各字符串值为键，各字符串的长度为值，组成键值对==--->这里键是i,值是len(i)
listdemo = ['Google','Runoob', 'Taobao']
listdemo_dict={i:len(i) for i in listdemo}
print(listdemo_dict)
# 提供三个数字，以三个数字为键，三个数字的平方为值来创建字典：
number_dict={i:i**2 for i in range(3)}
print((number_dict))
print(type(number_dict))

# 集合推导式
# { expression for item in Sequence if conditional}
# 计算数字 1,2,3 的平方数：
number_set={i**2 for i in range(3)}
print(number_set)
# 判断字符串中不是abc的字母并输出：
str_set={i for i in 'abcdefghij' if i not in 'abc'}
print(str_set)

# 生元组推导式（生成器表达式）
# ((expression for item in Sequence if conditional)
# 例如，我们可以使用下面的代码生成一个包含数字 1~9 的元组：
number_tuple=(i for i in range(1,10))#这个表达式生成的是一个生成器对象
# print(number_tuple)  #<generator object <genexpr> at 0x00000256FA47CB80> 
print(tuple(number_tuple))

#附加
# 结果值1 if 判断条件 else 结果2  for 变量名 in 原列表
